from django.db import connection
from django.conf import settings


class Query:
    """
    查询类的基类
    """
    # 查询sql
    __sql = """"""
    # 查询结果
    __result = {}
    # 结果表头
    __description = {}
    # 数据切片长度
    __page_size = 20
    # 数据起始位置
    __page_no = 1
    # 查询结果总长度
    __length = 0
    # 执行原生SQL的数据库连接函数
    __db_cursor = connection.cursor()

    @staticmethod
    def len_zero_to_default(dict):
        """如果dict长度为零,将其值置为`%`"""
        if len(dict) == 0:
            return "%"
        else:
            return dict
        pass

    def __query_sql(self):
        """在debug模式下在控制台打印执行的SQL脚本"""
        if settings.DEBUG:
            try:
                for sqllist in self.__db_cursor.db.queries:
                    print("{}:sql:{}".format(self.__class__, sqllist["sql"]))
            except BaseException as becx:
                print(self.__class__, becx)

    def get_length(self):
        """
        查询结果总长度   
        :return: int  
        """
        return self.__length

    def get_result(self):
        """
        获取查询结果
        """
        return self.__result

    def get_description(self):
        """
        获取查询结果的表头
        """
        return self.__description

    def execute_sql(self, sql, *args):
        """
        在debug模式下   
        :param sql: SQL 脚本   
        :param args: SQL 脚本对应参数   
        """
        self.__sql = sql
        # 静态变量方式调用数据库连接
        Query.__db_cursor.execute(self.__sql, args)
        self.__query_sql()
        # 结果的表头
        self.__description = [col[0].lower()
                              for col in Query.__db_cursor.description]
        # 获取结果集
        self.__result = Query.__db_cursor.fetchall()
        # 结果集长度
        self.__length = len(self.__result)
